nextjs server actionの使い所
【Next.js】Server Actionsを現場で使うテクニック
ざっくりみた感じだと置き換えるものって訳ではないみたいやな。
うまく共存して使うのが良さそう
api routeもこうパフォーマンスってなってくるとバックエンドのシステムはどのみち必要になりそう
---
改めて、server actionをちょっと使ってわかってきたことを書いてく。
https://ja.react.dev/reference/rsc/server-functions
https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations
まずServer Action自体はその名の通りサーバーでActionを実行するやつ。
Clientからサーバーサイドで実行したいコードを呼び出せるってのが大まかな機能かな。
Client ComponentでもServer Componentでも呼べる
ざっくりいえば、Clientサイドからでもサーバー側の処理を呼び出せるってことかな。
API RoutesだとAPIにエンドポイントを指定してリクエストしてサーバーサイドで実行って形だけど、Server Actionだと関数として記述してサーバーサイドのコードを実行できる
Formのmutationばっかりが目立ってるけど、別にFormのSubmission以外でも使える。
https://nextjs.org/docs/app/api-reference/directives/use-server#using-server-functions-in-a-client-component
公式でも書いてるけど、clientのonClickでfetchUsersしたりデータフェッチでも使っちゃいけないわけでもない。
ただ基本的にdata fetchとかをserver componentで取得するだけでいいなら、'use server'使ってserver actionにしたりはしなくてもいい。そのままawaitしてfetchすれば。
確かにServer ActionはAPI Routesを代替するものではない。
それぞれ、やりたいことが違うとおもう。
うまく言語かできないけど、個人的にServer ActionのほうがAPIを作ってリクエストしてってのをやるより、関数の型定義とかをそのまま共有してある程度使えるってのは便利なのかな?
関数なので、responseを返さなくてもいいしthrowできるのでクライアントでcatchして処理もできる
うーんとはいえ、別にAPIでもできなくはないことではある。なので細かい点で見れば違うけど似たようなことはできるんだろう。
じゃあServer Actionをなぜ使うかって言われると難しいな。
エンドポイント叩かなくていいget, post考えなくてもいいとかぐらいかな....わからん。
体感API ClientとAPIの中身を一緒に書いてるみたいな感覚。
どういう原理かはよくわからんが、'use server'をつけることでなんかendpointみたいなのを作ってactionを実行した際にserverにリクエストしてそのendpointのメソッド実行するみたいなのが可能になるらしいからProgressive Enhancement (プログレッシブエンハンスメント)できるみたいな感じなのかな。
js切っても動くってところは確かにメリットかもしれないけどこれだけがメリットではないと思う。
だから、別にこれ犠牲にするならreact-hook-formとかで実装することも可能ではあると思う。
react-hook-formでserver action呼んだ時ってどうなってるのか。
useActionStateかReact-hook-formか